package ai.people.netmon.utils.localdateUtil;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * 格式化java8  的 LocalDate  LocalDateTime
 *
 * @author yuanqinglong
 * @since 2020/12/28 10:24
 */
public class DateTimeFormatterUtil {


    /**
     * 格式化到年月
     */
    public static final DateTimeFormatter FORMAT_TO_MONTH = DateTimeFormatter.ofPattern("yyyy-MM");
    /**
     * 格式化到年月日
     */
    public static final DateTimeFormatter FORMAT_TO_DATE = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    /**
     * 格式化到年月日时分秒
     */
    public static final DateTimeFormatter FORMAT_TO_DATE_TIME = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 将LocalDate格式化到年月（yyyy-MM）
     *
     * @param localDate 日期
     * @return 格式化后的年月
     */
    public static String localDateFormatterToMonth(LocalDate localDate) {
        return FORMAT_TO_MONTH.format(localDate);
    }

    /**
     * 将LocalDate格式化String年月日（yyyy-MM-dd）
     *
     * @param localDate 日期
     * @return 格式化后的年月
     */
    public static String localDateFormatterToStringDate(LocalDate localDate) {
        return FORMAT_TO_DATE.format(localDate);
    }


    /**
     * 当前日期
     *
     * @return {@link String}
     */
    public static String currentDate() {
        return FORMAT_TO_DATE.format(LocalDate.now());
    }
    /**
     * 当前日期
     *
     * @return {@link String}
     */
    public static String currentDateTime() {
        return FORMAT_TO_DATE_TIME.format(LocalDateTime.now());
    }


    /**
     * 将LocalDateTime格式化到年月日（yyyy-MM-dd）
     *
     * @param localDateTime 日期
     * @return 格式化后的日期
     */
    public static String localDateTimeFormatterToDate(LocalDateTime localDateTime) {
        return FORMAT_TO_DATE.format(localDateTime);
    }


    /**
     * 将LocalDateTime格式化到年月日时分秒（yyyy-MM-dd HH:mm:ss）
     *
     * @param localDateTime 日期
     * @return 格式化后的时间
     */
    public static String localDateTimeFormatterToDateTime(LocalDateTime localDateTime) {
        return FORMAT_TO_DATE_TIME.format(localDateTime);
    }

    /**
     * 将String类型日期转换成LocalDate
     *
     * @param date String类型日期
     * @return LocalDate
     */
    public static LocalDate stringDateFormatterToLocalDate(String date) {
        return LocalDate.parse(date, DateTimeFormatterUtil.FORMAT_TO_DATE);
    }


    /**
     * 将String类型日期转换成LocalDate
     *
     * @param date String类型日期
     * @return LocalDate
     */
    public static LocalDateTime stringDateFormatterToLocalDateTime(String date) {
        return LocalDateTime.parse(date, DateTimeFormatterUtil.FORMAT_TO_DATE_TIME);
    }


    /**
     * 时间戳转日期时间
     *
     * @param timestamp 时间戳
     * @return {@link LocalDateTime}
     */
    public static LocalDateTime timestampToDateTime(long timestamp){
        Instant instant = Instant.ofEpochMilli(timestamp);
        return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    }


    public static void main(String[] args) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss").withZone(ZoneId.systemDefault());
        //2021-11-29T09:37:04+0800
        LocalDateTime parse = LocalDateTime.parse("2021-11-29T09:37:04+0800", dateTimeFormatter);
        System.out.println(parse.getNano());
    }

}
